//
//  UIButton+block.h
//  runtimeDemo
//
//  Created by kingboyrang on 2021/10/30.
//  Copyright © 2021 wulanzhou. All rights reserved.
//

/**
 runtime使用关联对象
 
 objc_setAssociatedObject 相当于 setValue:forKey 进行关联value对象
 objc_getAssociatedObject 用来读取对象
 
 1.关联属性  setButtonTypeName方法
 2.关联方法: 查看handleWithBlock方法
 3.交换方法: 系统自带的方法功能不够，给系统自带的方法扩展一些功能，并且保持原有的功能。
   案例查看：UIImage+Image.h文件
 4.获取属性列表            案例：MMModel类
 5.获取方法列表            案例：MMModel类
 6.对私有属性修改
 7.归档:解档(通过runtime快速的归档与解档) 案例：MMModel类
 */


#import <UIKit/UIKit.h>

typedef  void (^btnBlock)(id _Nullable sender);
//方式1
//static const char proKey;
//方式2
static const char * _Nullable proKey = "proKey"; // 或者static const char proKey

NS_ASSUME_NONNULL_BEGIN

@interface UIButton (block)
//关联方法
- (void)handleWithBlock:(btnBlock)block;

//关联属性(动态添加属性)
- (void)setButtonTypeName:(NSString *)name;
- (NSString *)buttonTypeName;

@end

NS_ASSUME_NONNULL_END
